home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 June / PersonalComputerWorld-June2009-CoverdiscCD.iso / Software / Freeware / Adobe AIR 1.5.1 / AdobeAIRInstaller.exe / setup.swf / scripts / mx / resources / ResourceManagerImpl.as < prev   
Encoding:
Text File  |  2009-02-12  |  16.2 KB  |  515 lines

  1. package mx.resources
  2. {
  3.    import flash.events.Event;
  4.    import flash.events.EventDispatcher;
  5.    import flash.events.IEventDispatcher;
  6.    import flash.events.TimerEvent;
  7.    import flash.system.ApplicationDomain;
  8.    import flash.system.Capabilities;
  9.    import flash.system.SecurityDomain;
  10.    import flash.utils.Timer;
  11.    import mx.core.mx_internal;
  12.    import mx.events.ModuleEvent;
  13.    import mx.events.ResourceEvent;
  14.    import mx.modules.IModuleInfo;
  15.    import mx.modules.ModuleManager;
  16.    import mx.utils.StringUtil;
  17.    
  18.    use namespace mx_internal;
  19.    
  20.    public class ResourceManagerImpl extends EventDispatcher implements IResourceManager
  21.    {
  22.       private static var instance:IResourceManager;
  23.       
  24.       mx_internal static const VERSION:String = "3.0.0.0";
  25.       
  26.       private var resourceModules:Object;
  27.       
  28.       private var initializedForNonFrameworkApp:Boolean = false;
  29.       
  30.       private var localeMap:Object;
  31.       
  32.       private var _localeChain:Array;
  33.       
  34.       public function ResourceManagerImpl()
  35.       {
  36.          localeMap = {};
  37.          resourceModules = {};
  38.          super();
  39.       }
  40.       
  41.       public static function getInstance() : IResourceManager
  42.       {
  43.          if(!instance)
  44.          {
  45.             instance = new ResourceManagerImpl();
  46.          }
  47.          return instance;
  48.       }
  49.       
  50.       public function get localeChain() : Array
  51.       {
  52.          return _localeChain;
  53.       }
  54.       
  55.       public function set localeChain(param1:Array) : void
  56.       {
  57.          _localeChain = param1;
  58.          update();
  59.       }
  60.       
  61.       [Bindable("change")]
  62.       public function getStringArray(param1:String, param2:String, param3:String = null) : Array
  63.       {
  64.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  65.          if(!_loc4_)
  66.          {
  67.             return null;
  68.          }
  69.          var _loc5_:* = _loc4_.content[param2];
  70.          var _loc6_:Array = String(_loc5_).split(",");
  71.          var _loc7_:int = int(_loc6_.length);
  72.          var _loc8_:int = 0;
  73.          while(_loc8_ < _loc7_)
  74.          {
  75.             _loc6_[_loc8_] = StringUtil.trim(_loc6_[_loc8_]);
  76.             _loc8_++;
  77.          }
  78.          return _loc6_;
  79.       }
  80.       
  81.       mx_internal function installCompiledResourceBundle(param1:ApplicationDomain, param2:String, param3:String) : void
  82.       {
  83.          var _loc4_:String = null;
  84.          var _loc5_:String = param3;
  85.          var _loc6_:int = int(param3.indexOf(":"));
  86.          if(_loc6_ != -1)
  87.          {
  88.             _loc4_ = param3.substring(0,_loc6_);
  89.             _loc5_ = param3.substring(_loc6_ + 1);
  90.          }
  91.          if(getResourceBundle(param2,param3))
  92.          {
  93.             return;
  94.          }
  95.          var _loc7_:* = param2 + "$" + _loc5_ + "_properties";
  96.          if(_loc4_ != null)
  97.          {
  98.             _loc7_ = _loc4_ + "." + _loc7_;
  99.          }
  100.          var _loc8_:Class = null;
  101.          if(param1.hasDefinition(_loc7_))
  102.          {
  103.             _loc8_ = Class(param1.getDefinition(_loc7_));
  104.          }
  105.          if(!_loc8_)
  106.          {
  107.             _loc7_ = param3;
  108.             if(param1.hasDefinition(_loc7_))
  109.             {
  110.                _loc8_ = Class(param1.getDefinition(_loc7_));
  111.             }
  112.          }
  113.          if(!_loc8_)
  114.          {
  115.             _loc7_ = param3 + "_properties";
  116.             if(param1.hasDefinition(_loc7_))
  117.             {
  118.                _loc8_ = Class(param1.getDefinition(_loc7_));
  119.             }
  120.          }
  121.          if(!_loc8_)
  122.          {
  123.             throw new Error("Could not find compiled resource bundle \'" + param3 + "\' for locale \'" + param2 + "\'.");
  124.          }
  125.          var _loc9_:ResourceBundle = ResourceBundle(new _loc8_());
  126.          _loc9_.mx_internal::_locale = param2;
  127.          _loc9_.mx_internal::_bundleName = param3;
  128.          addResourceBundle(_loc9_);
  129.       }
  130.       
  131.       [Bindable("change")]
  132.       public function getString(param1:String, param2:String, param3:Array = null, param4:String = null) : String
  133.       {
  134.          var _loc5_:IResourceBundle = findBundle(param1,param2,param4);
  135.          if(!_loc5_)
  136.          {
  137.             return null;
  138.          }
  139.          var _loc6_:String = String(_loc5_.content[param2]);
  140.          if(param3)
  141.          {
  142.             _loc6_ = StringUtil.substitute(_loc6_,param3);
  143.          }
  144.          return _loc6_;
  145.       }
  146.       
  147.       public function loadResourceModule(param1:String, param2:Boolean = true, param3:ApplicationDomain = null, param4:SecurityDomain = null) : IEventDispatcher
  148.       {
  149.          var errorHandler:Function;
  150.          var moduleInfo:IModuleInfo = null;
  151.          var resourceEventDispatcher:ResourceEventDispatcher = null;
  152.          var timer:Timer = null;
  153.          var timerHandler:Function = null;
  154.          var url:String = param1;
  155.          var updateFlag:Boolean = param2;
  156.          var applicationDomain:ApplicationDomain = param3;
  157.          var securityDomain:SecurityDomain = param4;
  158.          moduleInfo = ModuleManager.getModule(url);
  159.          resourceEventDispatcher = new ResourceEventDispatcher(moduleInfo);
  160.          var readyHandler:Function = function(param1:ModuleEvent):void
  161.          {
  162.             var _loc2_:* = param1.module.factory.create();
  163.             resourceModules[param1.module.url].resourceModule = _loc2_;
  164.             if(updateFlag)
  165.             {
  166.                update();
  167.             }
  168.          };
  169.          moduleInfo.addEventListener(ModuleEvent.READY,readyHandler,false,0,true);
  170.          errorHandler = function(param1:ModuleEvent):void
  171.          {
  172.             var _loc3_:ResourceEvent = null;
  173.             var _loc2_:String = "Unable to load resource module from " + url;
  174.             if(resourceEventDispatcher.willTrigger(ResourceEvent.ERROR))
  175.             {
  176.                _loc3_ = new ResourceEvent(ResourceEvent.ERROR,param1.bubbles,param1.cancelable);
  177.                _loc3_.bytesLoaded = 0;
  178.                _loc3_.bytesTotal = 0;
  179.                _loc3_.errorText = _loc2_;
  180.                resourceEventDispatcher.dispatchEvent(_loc3_);
  181.                return;
  182.             }
  183.             throw new Error(_loc2_);
  184.          };
  185.          moduleInfo.addEventListener(ModuleEvent.ERROR,errorHandler,false,0,true);
  186.          resourceModules[url] = new ResourceModuleInfo(moduleInfo,readyHandler,errorHandler);
  187.          timer = new Timer(0);
  188.          timerHandler = function(param1:TimerEvent):void
  189.          {
  190.             timer.removeEventListener(TimerEvent.TIMER,timerHandler);
  191.             timer.stop();
  192.             moduleInfo.load(applicationDomain,securityDomain);
  193.          };
  194.          timer.addEventListener(TimerEvent.TIMER,timerHandler,false,0,true);
  195.          timer.start();
  196.          return resourceEventDispatcher;
  197.       }
  198.       
  199.       public function getLocales() : Array
  200.       {
  201.          var _loc2_:String = null;
  202.          var _loc1_:Array = [];
  203.          for(_loc2_ in localeMap)
  204.          {
  205.             _loc1_.push(_loc2_);
  206.          }
  207.          return _loc1_;
  208.       }
  209.       
  210.       public function removeResourceBundlesForLocale(param1:String) : void
  211.       {
  212.          delete localeMap[param1];
  213.       }
  214.       
  215.       public function getResourceBundle(param1:String, param2:String) : IResourceBundle
  216.       {
  217.          var _loc3_:Object = localeMap[param1];
  218.          if(!_loc3_)
  219.          {
  220.             return null;
  221.          }
  222.          return _loc3_[param2];
  223.       }
  224.       
  225.       private function dumpResourceModule(param1:*) : void
  226.       {
  227.          var _loc2_:ResourceBundle = null;
  228.          var _loc3_:String = null;
  229.          for each(_loc2_ in param1.resourceBundles)
  230.          {
  231.             trace(_loc2_.locale,_loc2_.bundleName);
  232.             for(_loc3_ in _loc2_.content)
  233.             {
  234.             }
  235.          }
  236.       }
  237.       
  238.       public function addResourceBundle(param1:IResourceBundle) : void
  239.       {
  240.          var _loc2_:String = param1.locale;
  241.          var _loc3_:String = param1.bundleName;
  242.          if(!localeMap[_loc2_])
  243.          {
  244.             localeMap[_loc2_] = {};
  245.          }
  246.          localeMap[_loc2_][_loc3_] = param1;
  247.       }
  248.       
  249.       [Bindable("change")]
  250.       public function getObject(param1:String, param2:String, param3:String = null) : *
  251.       {
  252.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  253.          if(!_loc4_)
  254.          {
  255.             return undefined;
  256.          }
  257.          return _loc4_.content[param2];
  258.       }
  259.       
  260.       [Bindable("change")]
  261.       public function getInt(param1:String, param2:String, param3:String = null) : int
  262.       {
  263.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  264.          if(!_loc4_)
  265.          {
  266.             return 0;
  267.          }
  268.          var _loc5_:* = _loc4_.content[param2];
  269.          return int(_loc5_);
  270.       }
  271.       
  272.       private function findBundle(param1:String, param2:String, param3:String) : IResourceBundle
  273.       {
  274.          supportNonFrameworkApps();
  275.          return param3 != null ? getResourceBundle(param3,param1) : findResourceBundleWithResource(param1,param2);
  276.       }
  277.       
  278.       private function supportNonFrameworkApps() : void
  279.       {
  280.          if(initializedForNonFrameworkApp)
  281.          {
  282.             return;
  283.          }
  284.          initializedForNonFrameworkApp = true;
  285.          if(getLocales().length > 0)
  286.          {
  287.             return;
  288.          }
  289.          var _loc1_:ApplicationDomain = ApplicationDomain.currentDomain;
  290.          if(!_loc1_.hasDefinition("_CompiledResourceBundleInfo"))
  291.          {
  292.             return;
  293.          }
  294.          var _loc2_:Class = Class(_loc1_.getDefinition("_CompiledResourceBundleInfo"));
  295.          var _loc3_:Array = _loc2_.compiledLocales;
  296.          var _loc4_:Array = _loc2_.compiledResourceBundleNames;
  297.          installCompiledResourceBundles(_loc1_,_loc3_,_loc4_);
  298.          localeChain = _loc3_;
  299.       }
  300.       
  301.       public function getBundleNamesForLocale(param1:String) : Array
  302.       {
  303.          var _loc3_:String = null;
  304.          var _loc2_:Array = [];
  305.          for(_loc3_ in localeMap[param1])
  306.          {
  307.             _loc2_.push(_loc3_);
  308.          }
  309.          return _loc2_;
  310.       }
  311.       
  312.       public function getPreferredLocaleChain() : Array
  313.       {
  314.          return LocaleSorter.sortLocalesByPreference(getLocales(),getSystemPreferredLocales(),null,true);
  315.       }
  316.       
  317.       [Bindable("change")]
  318.       public function getNumber(param1:String, param2:String, param3:String = null) : Number
  319.       {
  320.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  321.          if(!_loc4_)
  322.          {
  323.             return NaN;
  324.          }
  325.          var _loc5_:* = _loc4_.content[param2];
  326.          return Number(_loc5_);
  327.       }
  328.       
  329.       public function update() : void
  330.       {
  331.          dispatchEvent(new Event(Event.CHANGE));
  332.       }
  333.       
  334.       [Bindable("change")]
  335.       public function getClass(param1:String, param2:String, param3:String = null) : Class
  336.       {
  337.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  338.          if(!_loc4_)
  339.          {
  340.             return null;
  341.          }
  342.          var _loc5_:* = _loc4_.content[param2];
  343.          return _loc5_ as Class;
  344.       }
  345.       
  346.       public function removeResourceBundle(param1:String, param2:String) : void
  347.       {
  348.          delete localeMap[param1][param2];
  349.          if(getBundleNamesForLocale(param1).length == 0)
  350.          {
  351.             delete localeMap[param1];
  352.          }
  353.       }
  354.       
  355.       public function initializeLocaleChain(param1:Array) : void
  356.       {
  357.          localeChain = LocaleSorter.sortLocalesByPreference(param1,getSystemPreferredLocales(),null,true);
  358.       }
  359.       
  360.       public function findResourceBundleWithResource(param1:String, param2:String) : IResourceBundle
  361.       {
  362.          var _loc5_:String = null;
  363.          var _loc6_:Object = null;
  364.          var _loc7_:ResourceBundle = null;
  365.          if(!_localeChain)
  366.          {
  367.             return null;
  368.          }
  369.          var _loc3_:int = int(_localeChain.length);
  370.          var _loc4_:int = 0;
  371.          while(_loc4_ < _loc3_)
  372.          {
  373.             _loc5_ = localeChain[_loc4_];
  374.             _loc6_ = localeMap[_loc5_];
  375.             if(_loc6_)
  376.             {
  377.                _loc7_ = _loc6_[param1];
  378.                if(_loc7_)
  379.                {
  380.                   if(param2 in _loc7_.content)
  381.                   {
  382.                      return _loc7_;
  383.                   }
  384.                }
  385.             }
  386.             _loc4_++;
  387.          }
  388.          return null;
  389.       }
  390.       
  391.       [Bindable("change")]
  392.       public function getUint(param1:String, param2:String, param3:String = null) : uint
  393.       {
  394.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  395.          if(!_loc4_)
  396.          {
  397.             return 0;
  398.          }
  399.          var _loc5_:* = _loc4_.content[param2];
  400.          return uint(_loc5_);
  401.       }
  402.       
  403.       private function getSystemPreferredLocales() : Array
  404.       {
  405.          var _loc1_:Array = null;
  406.          if(Capabilities["languages"])
  407.          {
  408.             _loc1_ = Capabilities["languages"];
  409.          }
  410.          else
  411.          {
  412.             _loc1_ = [Capabilities.language];
  413.          }
  414.          return _loc1_;
  415.       }
  416.       
  417.       public function installCompiledResourceBundles(param1:ApplicationDomain, param2:Array, param3:Array) : void
  418.       {
  419.          var _loc7_:String = null;
  420.          var _loc8_:int = 0;
  421.          var _loc9_:String = null;
  422.          var _loc4_:int = !!param2 ? int(param2.length) : 0;
  423.          var _loc5_:int = !!param3 ? int(param3.length) : 0;
  424.          var _loc6_:int = 0;
  425.          while(_loc6_ < _loc4_)
  426.          {
  427.             _loc7_ = param2[_loc6_];
  428.             _loc8_ = 0;
  429.             while(_loc8_ < _loc5_)
  430.             {
  431.                _loc9_ = param3[_loc8_];
  432.                mx_internal::installCompiledResourceBundle(param1,_loc7_,_loc9_);
  433.                _loc8_++;
  434.             }
  435.             _loc6_++;
  436.          }
  437.       }
  438.       
  439.       [Bindable("change")]
  440.       public function getBoolean(param1:String, param2:String, param3:String = null) : Boolean
  441.       {
  442.          var _loc4_:IResourceBundle = findBundle(param1,param2,param3);
  443.          if(!_loc4_)
  444.          {
  445.             return false;
  446.          }
  447.          var _loc5_:* = _loc4_.content[param2];
  448.          return String(_loc5_).toLowerCase() == "true";
  449.       }
  450.       
  451.       public function unloadResourceModule(param1:String, param2:Boolean = true) : void
  452.       {
  453.          throw new Error("unloadResourceModule() is not yet implemented.");
  454.       }
  455.    }
  456. }
  457.  
  458. import flash.events.EventDispatcher;
  459. import mx.events.ModuleEvent;
  460. import mx.events.ResourceEvent;
  461. import mx.modules.IModuleInfo;
  462.  
  463. class ResourceModuleInfo
  464. {
  465.    public var resourceModule:IResourceModule;
  466.    
  467.    public var errorHandler:Function;
  468.    
  469.    public var readyHandler:Function;
  470.    
  471.    public var moduleInfo:IModuleInfo;
  472.    
  473.    public function ResourceModuleInfo(param1:IModuleInfo, param2:Function, param3:Function)
  474.    {
  475.       super();
  476.       this.moduleInfo = param1;
  477.       this.readyHandler = param2;
  478.       this.errorHandler = param3;
  479.    }
  480. }
  481.  
  482. class ResourceEventDispatcher extends EventDispatcher
  483. {
  484.    public function ResourceEventDispatcher(param1:IModuleInfo)
  485.    {
  486.       super();
  487.       param1.addEventListener(ModuleEvent.ERROR,moduleInfo_errorHandler,false,0,true);
  488.       param1.addEventListener(ModuleEvent.PROGRESS,moduleInfo_progressHandler,false,0,true);
  489.       param1.addEventListener(ModuleEvent.READY,moduleInfo_readyHandler,false,0,true);
  490.    }
  491.    
  492.    private function moduleInfo_progressHandler(param1:ModuleEvent) : void
  493.    {
  494.       var _loc2_:ResourceEvent = new ResourceEvent(ResourceEvent.PROGRESS,param1.bubbles,param1.cancelable);
  495.       _loc2_.bytesLoaded = param1.bytesLoaded;
  496.       _loc2_.bytesTotal = param1.bytesTotal;
  497.       dispatchEvent(_loc2_);
  498.    }
  499.    
  500.    private function moduleInfo_readyHandler(param1:ModuleEvent) : void
  501.    {
  502.       var _loc2_:ResourceEvent = new ResourceEvent(ResourceEvent.COMPLETE);
  503.       dispatchEvent(_loc2_);
  504.    }
  505.    
  506.    private function moduleInfo_errorHandler(param1:ModuleEvent) : void
  507.    {
  508.       var _loc2_:ResourceEvent = new ResourceEvent(ResourceEvent.ERROR,param1.bubbles,param1.cancelable);
  509.       _loc2_.bytesLoaded = param1.bytesLoaded;
  510.       _loc2_.bytesTotal = param1.bytesTotal;
  511.       _loc2_.errorText = param1.errorText;
  512.       dispatchEvent(_loc2_);
  513.    }
  514. }
  515.